/******************************************************************************/
/********************************** 基础建设 **********************************/
/******************************************************************************/

import { CommonObj } from "@/types";

/**
 * 全局代码错误捕捉
 * @param {any} error 错误信息
 * */
export function handleError(error: any) {
  const { status, name } = error;
  // 过滤 HTTP 请求错误
  if (status || status === 0) return false;
  const errorMap: CommonObj = {
    InternalError: "Javascript引擎内部错误",
    ReferenceError: "未找到对象",
    TypeError: "使用了错误的类型或对象",
    RangeError: "使用内置对象时，参数超范围",
    SyntaxError: "语法错误",
    EvalError: "错误的使用了Eval",
    URIError: "URI错误",
  };
  // ElNotification({
  //   title: errorMap[name] ?? "未知错误",
  //   message: error,
  //   type: "error",
  //   duration: 3000,
  // });
  console.error(errorMap[name] ?? "未知错误", error);
}

/**
 * 动态加载js脚本（加载web-view脚本）
 * @param {String} url js脚本地址
 * @param {Object} [attr={}] 需要给`script`标签额外指定的属性
 * @return {Promise} 返回一个Promise对象
 * @example loadScript('https://appx/web-view.min.js')
 */

export function loadScript(url: string) {
  const attr =
    arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  const returnScript =
    arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  return new Promise(function (resolve, reject) {
    const $script: any = document.createElement("script");
    $script.type = "text/javascript";

    $script.onload = function () {
      return resolve($script);
    };

    $script.onerror = function (err: Error) {
      reject(err || new Error("load script error: ".concat(url)));
    };

    for (const key in attr) {
      $script[key] = attr[key];
    }

    $script.src = url;
    document.body.appendChild($script);
    returnScript && returnScript($script);
  });
}
